package cn.android666.timbertree

import timber.log.Timber
import kotlin.collections.first
import kotlin.jvm.java
import kotlin.jvm.javaClass
import kotlin.text.substringAfterLast

/**
 * Timber工具类，用于记录方法名
 */
object TimberUtil {

    /** 记录调用此方法的当前类名和方法名 */
    fun logMethodName() {
        logMethodNameWithObj(null)
    }

    /** 记录调用此方法的当前对象的类名和方法名，比如在父类中调用，参数传入this，则打印的类名为子类的类名 */
    fun logMethodName(`this`: Any) {
        logMethodNameWithObj(`this`)
    }

    private fun logMethodNameWithObj(`this`: Any?) {
        val element: StackTraceElement = Throwable().stackTrace.first { it.className != TimberUtil::class.java.name }
        val className = if (`this` == null) element.className.substringAfterLast(".") else `this`.javaClass.simpleName
        Timber.tag(className).i("${element.methodName}()")
    }

}